﻿// --------------------------------
// <copyright file="MethodParameter.cs" company="TRONSoft">
//     Copyright (c) TRONSoft.
// </copyright>
// <license>
//   This source code is subject to terms and conditions of the Microsoft
//   Public License. A copy of the license can be found in the License.html
//   file at the root of this distribution. If you cannot locate the
//   Microsoft Public License, please send an email to dlr@microsoft.com.
//   By using this source code in any fashion, you are agreeing to be bound 
//   by the terms of the Microsoft Public License. You must not remove this
//   notice, or any other, from this software.
// </license>
// <author>Tron</author>
// ---------------------------------

using System;
using System.CodeDom;

namespace Tronsoft.Actucal.CalculationEngineCreator
{
    public class MethodParameter
    {
        private readonly FieldDirection direction = FieldDirection.In;
        private readonly string name;
        private readonly Type type;

        public MethodParameter(string name, Type type)
        {
            if (string.IsNullOrEmpty(name)) 
                throw new ArgumentNullException("name");
            if (name.Contains(" "))
                throw new ArgumentException("A name cannot contains spaces.", "name");
            if (type == null) 
                throw new ArgumentNullException("type");

            this.name = name;
            this.type = type;
        }

        public MethodParameter(string name, FieldDirection direction, Type type)
        {
            if (string.IsNullOrEmpty(name)) 
                throw new ArgumentNullException("name");
            if (name.Contains(" "))
                throw new ArgumentException("A name cannot contains spaces.", "name");
            if (type == null) 
                throw new ArgumentNullException("type");

            this.name = name;
            this.direction = direction;
            this.type = type;
        }

        public string Name
        {
            get { return name; }
        }

        public FieldDirection Direction
        {
            get { return direction; }
        }

        public Type Type
        {
            get { return type; }
        }
    }
}